home *** CD-ROM | disk | FTP | other *** search
/ Mac Magazin/MacEasy 52 / Mac Magazin and MacEasy Magazine CD - Issue 52.iso / Updates / Stata 5.0 Ado-files / ado.sea / newado / xtreg_fe.ado < prev    next >
Text File  |  1998-11-22  |  5KB  |  198 lines

  1. *! version 1.0.4  10jul1994
  2. program define xtreg_fe
  3.     version 4.0
  4.     local options "Level(integer $S_level)"
  5.     if ("`1'"!="" & substr("`1'",1,1)!=",") {
  6.         local varlist "req ex"
  7.         local if "opt"
  8.         local options "`options' FAST I(string)"
  9.         parse "`*'"
  10.         parse "`varlist'", parse(" ")
  11.  
  12.         xt_iis `i'
  13.         local ivar "$S_1"
  14.  
  15.         tempvar x w touse tmp XB U Ti
  16.         tempname sst sse r2
  17.         local dv `1'
  18.  
  19.         if "`fast'"!="" {
  20.             local fast "*"
  21.         }
  22.         
  23.         quietly {
  24.             mark `touse' `if'
  25.             markout `touse' `varlist' `ivar'
  26.             count if `touse'
  27.             if _result(1)<=1 { error 2001 }
  28.             sort `ivar' `touse'
  29.             preserve
  30.             keep if `touse'
  31.             keep `varlist' `ivar' `userwgt'
  32.             `fast' regress `varlist'
  33.             `fast' local r2c = _result(7)
  34.  
  35.             summ `1'
  36.             scalar `sst' = (_result(1)-1)*_result(4)
  37.  
  38.             by `ivar': gen double `x' = sum(`1')/_n
  39.             summ `1'
  40.             by `ivar': replace `1' = (`1' - `x'[_N]) + _result(3)
  41.             drop `x'
  42.             mac shift
  43.  
  44.             while ("`1'"!="") {
  45.                 by `ivar': gen double `x' = sum(`1')/_n
  46.                 summ `1'
  47.                 by `ivar': replace `1' = /*
  48.                     */ (`1' - `x'[_N]) + _result(3)
  49.                 drop `x'
  50.                 count if `1'!=`1'[1]
  51.                 if _result(1) == 0 {
  52.                     replace `1' = 0
  53.                 }
  54.                 mac shift
  55.             }
  56.  
  57.             count if `ivar'!=`ivar'[_n-1]
  58.             local dfa = _result(1)-1
  59.  
  60.             regress `varlist'
  61.             local nobs = _result(1)
  62.             local dfb = _result(3)
  63.             scalar `sse' = _result(4)
  64.             local dfe = _result(5) - `dfa'
  65.             if `dfe'<=0 | `dfe'==. { noi error 2001 } 
  66.  
  67.             * we could avoid this if only we knew dfe in advance
  68.             regress `varlist', dof(`dfe')
  69.             scalar S_E_sse = `sse'
  70.             global S_E_mdf = `dfa' + `dfb'
  71.             global S_E_tdf = `nobs'-1-$S_E_mdf
  72.             if "`fast'"!="" { exit }
  73.  
  74.             scalar S_E_sst = `sst'
  75.             scalar S_E_nobs = `nobs'
  76.             global S_E_dfb = `dfb'
  77.             scalar S_E_r2w = _result(7)
  78.             global S_E_ivar    "`ivar'"
  79.             global S_E_dfa  `dfa'     /* # of coefs absorbed */
  80.             global S_E_f = _result(6)
  81.             
  82.             scalar `r2'=1-`sse'/`sst'
  83.             scalar S_E_f2 = ((`r2'-`r2c')/($S_E_dfa))/ /*
  84.                 */ ((1-`r2')/$S_E_tdf)
  85.  
  86.  
  87.             sort `ivar'  /* sic, in case in varlist */
  88.             by `ivar': gen long `Ti' = _N if _n==_N
  89.             summ `Ti'
  90.             scalar S_E_T = _result(6) 
  91.             scalar S_E_Tbar = _result(3)
  92.             if _result(5)==_result(6) {
  93.                 global S_E_Tcon 1
  94.             }
  95.             else     global S_E_Tcon 0 
  96.             count if `Ti'!=. 
  97.             scalar S_E_n = _result(1)
  98.  
  99.             restore
  100.             predict double `XB' if `touse'
  101.             by `ivar' `touse': gen double `U' = /*
  102.                 */ cond(`touse' & _n==_N, /*
  103.                 */ sum($S_E_depv)/_n-sum(`XB')/_n,.) if `touse'
  104.             summ `U'
  105.             scalar S_E_ui=sqrt(_result(4))
  106.             by `ivar' `touse': replace `U' = `U'[_N]
  107.             corr `XB' `U'
  108.             scalar S_E_rho = _result(4)
  109.  
  110.             corr $S_E_depv `XB' if `touse'
  111.             scalar S_E_r2o = _result(4)^2
  112.  
  113.             by `ivar' `touse': replace `XB' = /*
  114.                 */ cond(_n==_N & `touse', /*
  115.                 */ sum(`XB'/_N),.)
  116.             by `ivar' `touse': replace `U' = /* 
  117.                 */ cond(_n==_N & `touse', /*
  118.                 */ sum($S_E_depv/_N),.)
  119.             corr `U' `XB'
  120.             scalar S_E_r2b = _result(4)^2
  121.             
  122.             parse "`varlist'", parse(" ")
  123.             mac shift
  124.             global S_E_vl "`*'"
  125.             global S_E_if "`if'"
  126.             global S_E_depv "`dv'"
  127.             global S_E_cmd2 "xtreg_fe"
  128.             global S_E_cmd "xtreg"
  129.         }
  130.     }
  131.     else {
  132.         if ("$S_E_cmd2" !="xtreg_fe") { error 301 }
  133.         parse "`*'"
  134.     }
  135.     if (`level'<10 | `level'>99) { local level 95 }
  136.  
  137.     if $S_E_Tcon {
  138.         local Twrd "    T"
  139.     }
  140.     else    local Twrd "T-bar"
  141.  
  142.     local dft = scalar(S_E_nobs) - 1
  143.     local dfe = `dft' - $S_E_mdf
  144.     * local ssm = scalar(S_E_sst - S_E_sse)
  145.     * local msm = `ssm'/$S_E_mdf
  146.     local ssm . 
  147.     local msm .
  148.  
  149.     local mse = scalar(S_E_sse)/`dfe'
  150.     local p = fprob($S_E_dfb,`dfe',$S_E_f)
  151.  
  152.     di _n in gr _col(46) "Fixed-effects (within) regression"
  153.     di in gr /*
  154.         */ "sd(u_$S_E_ivar)" _col(30) "= " in ye %9.0g scalar(S_E_ui) /*
  155.         */ in gr _col(56) "Number of obs =" /*
  156.         */ in ye %8.0f scalar(S_E_nobs)
  157.  
  158.     di in gr /* 
  159.         */ "sd(e_${S_E_ivar}_t)" _col(30) "= " /*
  160.         */ in ye %9.0g sqrt(`mse') /*
  161.         */ in gr _col(68) "n =" in ye %8.0f scalar(S_E_n)
  162.  
  163.     di in gr /*
  164.         */ "sd(e_${S_E_ivar}_t + u_$S_E_ivar)" _col(30) "= " /*
  165.         */ in ye %9.0g sqrt(scalar(S_E_ui)^2+`mse') /*
  166.         */ in gr _col(64) "`Twrd' =" in ye %8.0g scalar(S_E_Tbar)
  167.  
  168.     di _n in gr /*
  169.         */ "corr(u_$S_E_ivar, Xb)" _col(30) "= " /*
  170.         */ in ye %9.4f scalar(S_E_rho) /*
  171.         */ in gr _col(56) "R-sq within   =" in ye %8.4f scalar(S_E_r2w)
  172.  
  173.     di in gr /*
  174.         */ in gr _col(56) "     between  =" in ye %8.4f scalar(S_E_r2b)
  175.  
  176.     di in gr /*
  177.         */ in gr _col(56) "     overall  =" in ye %8.4f scalar(S_E_r2o)
  178.  
  179.     di _n in gr /*
  180.         */ _col(56) "F(" %3.0f $S_E_dfb "," %6.0f `dfe' ") =" /*
  181.         */ in ye %8.2f $S_E_f
  182.  
  183.     di in gr /*
  184.         */ in gr _col(61) "Prob > F =" in ye %8.4f `p' _n
  185.  
  186.     regress , level(`level') nohead
  187.     local skip = 8 - length("$S_E_ivar")
  188.  
  189.     local dfa1 = $S_E_dfa + 1
  190.     local skip2 = max(13-length("$S_E_dfa"),0)
  191.     local todisp "F($S_E_dfa,$S_E_tdf) = "
  192.     local skip3 = max(23-length("`todisp'"),0)
  193.     di _skip(`skip') in gr "$S_E_ivar |" _skip(`skip3') "`todisp'" /*
  194.         */ in ye %10.3f scalar(S_E_f2) /*
  195.         */ %8.3f fprob($S_E_dfa,$S_E_tdf,scalar(S_E_f2)) /* 
  196.         */ in gr _skip(`skip2') "(`dfa1' categories)"
  197. end
  198.